package com.cjx.stars.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.cjx.stars.common.Response;
import com.cjx.stars.pojo.table.User;
import com.cjx.stars.pojo.vo.UserVo;
import com.cjx.stars.pojo.request.Login;
import com.cjx.stars.pojo.request.Register;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
* @author cjx
* @description 针对表【t_user(用户表)】的数据库操作Service
* @createDate 2024-02-02 14:44:06
*/
public interface UserService extends IService<User> {

    /**
     * 用户注册
     * @param userRegister
     * @return
     */
    Response<?> register(Register userRegister);

    /**
     * 用户登录
     * @param userLogin
     * @return
     */
    Response<String> login(Login userLogin);

    /**
     * 生成注册验证码并发送
     * @param phone
     * @return
     */
    Response<?> message(String phone);

    /**
     * 修改用户标签
     * @param tags
     * @param userId
     * @return
     */
    Response<?> updateTags(ArrayList<String> tags, Long userId, String token);
    /**
     * 用户退出登录
     * @return
     */
    Response<?> logout(HttpServletRequest request);


    /**
     * 修改用户信息
     * @param updateUser
     * @param userId
     * @return
     */
    Response<?> userUpdate(UserVo updateUser, Long userId, String token);

    /**
     * 根据标签分页查询用户
     * @param currentPage
     * @param tags
     * @return
     */
    Response<?> getSearchTags(int currentPage, ArrayList<String> tags);

    /**
     * 利用推荐算法给当前用户推荐伙伴
     * @param currentPage
     * @param username
     * @return
     */
    Page<UserVo> matchUser(int currentPage, String username , Long userId);

    /**
     * 根据用户id获取用户头像
     * @param userIds 用户id
     * @return 头像列表
     */
    List<String> getUserAvatarsByUserIds(List<Long> userIds);

    /**
     * 根据id获取详细的用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    Response<?> getDetailedUser(Long userId);

    /**
     * 根据用户id列表查询用户信息
     * @param userIdList 用户id
     * @param userId 登录用户id
     * @return 用户信息
     */
    List<UserVo> getUserListByIdList(List<Long> userIdList, Long userId);

    /**
     * 修改用户邮箱
     * @param email 待修改的邮箱
     * @return 返回信息
     */
    Response<?> sendUpdateEmailCode(String email);

    /**
     * 修改用户手机号或邮箱
     * @param updateUser 修改信息
     */
    void updateUserWithCode(UserVo updateUser);

    /**
     * 发送手机验证码
     */
    void forgetUserPasswordSendPhoneCode(String phone);

    /**
     * 校验手机验证码
     * @param phone 手机号
     * @param code 验证码
     */
    void checkCode(String phone, String code);

    /**
     * 修改用户密码
     * @param phone 用户手机号
     * @param code 验证码
     * @param password 密码
     * @param confirmPassword 确定密码
     */
    void updatePassword(String phone, String code, String password, String confirmPassword);
}
